// 搜索算法集合
class SearchAlgorithms {
  // 线性搜索 - O(n)
  linearSearch(arr, target) {
    // TODO: 实现线性搜索
    // 返回目标元素的索引，如果不存在返回 -1
  }

  // 二分搜索 - O(log n) - 要求数组已排序
  binarySearch(arr, target) {
    // TODO: 实现二分搜索
    // 返回目标元素的索引，如果不存在返回 -1
  }

  // 插值搜索 - O(log log n) 平均 - 要求数组已排序且均匀分布
  interpolationSearch(arr, target) {
    // TODO: 实现插值搜索
    // 返回目标元素的索引，如果不存在返回 -1
  }

  // 指数搜索 - O(log n) - 用于无界数组
  exponentialSearch(arr, target) {
    // TODO: 实现指数搜索
    // 返回目标元素的索引，如果不存在返回 -1
  }

  // 斐波那契搜索 - O(log n) - 使用斐波那契数列
  fibonacciSearch(arr, target) {
    // TODO: 实现斐波那契搜索
    // 返回目标元素的索引，如果不存在返回 -1
  }

  // 跳跃搜索 - O(√n) - 用于已排序数组
  jumpSearch(arr, target) {
    // TODO: 实现跳跃搜索
    // 返回目标元素的索引，如果不存在返回 -1
  }

  // 三元搜索 - O(log₃ n) - 将数组分成三部分
  ternarySearch(arr, target) {
    // TODO: 实现三元搜索
    // 返回目标元素的索引，如果不存在返回 -1
  }

  // 查找第一个出现的位置
  findFirstOccurrence(arr, target) {
    // TODO: 实现查找第一个出现的位置
    // 返回目标元素第一次出现的索引，如果不存在返回 -1
  }

  // 查找最后一个出现的位置
  findLastOccurrence(arr, target) {
    // TODO: 实现查找最后一个出现的位置
    // 返回目标元素最后一次出现的索引，如果不存在返回 -1
  }

  // 查找所有出现的位置
  findAllOccurrences(arr, target) {
    // TODO: 实现查找所有出现的位置
    // 返回目标元素所有出现位置的索引数组
  }
}

module.exports = SearchAlgorithms
